class TaskModule:
    def __init__(self, script , role, background, description, completion_criteria,history):
        """
        初始化任务模块。
        :param script: 语录
        :param history: 历史对话
        :param role: LLM模型扮演的角色
        :param background: 故事发生的背景
        :param description: 任务描述
        :param completion_criteria: 任务达成的条件
        """
        self.script = script
        self.history = history
        self.role = role
        self.background = background
        self.description = description
        self.completion_criteria = completion_criteria
        self.tips = f"规则：" \
                    f"1.现在你扮演的角色是：{role}\n" \
       f"2.在任务开始之前，请熟悉角色的语录：{script}，以及故事背景：{background}\n" \
       f"3.用户将通过与你进行对话来完成任务。你的任务是根据任务描述：{description}和任务达成条件：{completion_criteria}来判断用户当前输入的内容是否完成了任务。\n" \
       f"4.如果用户没有完成任务，你需要根据用户的历史对话：{history}继续聊下去，并在适当的时候提示说“任务失败”。  \n" \
       "5.当任务完成时，你需要提示说“任务完成”。\n" \
       "6. 你的每次回答都需要包括语言、动作以及任务是否成功的提示语。请确保你的回答符合角色的设定，并在适当的时刻加入角色的语录。 \n " \
       "7.无论用户是否完成任务，你都需要回复一段话和动作，并在回复的末尾添加“任务完成”或“任务失败”来提示任务状态。 请确保你的回复简洁明了，只包含一段话，同时包含任务是否成功的提示。\n" \

    def displayModule(self):
        """
        拼接的任务模板但没有用户输入
        :return: 拼接的任务模板
        """
        return f"{self.tips}\n你的角色：{self.role}\n故事背景：{self.background}\n任务描述：{self.description}\n达成条件：{self.completion_criteria}\n语录：{self.script}\n历史对话:{self.history}"

    # 使用示例


task_module = TaskModule(
    role = "林瑾珂：男，是A大校草，喜欢打篮球。\n" \
               "身高188cm,八块腹肌，是全校女生喜欢和暗恋的对象。\n" \
               "家里特别有钱，父母都是好几个公司的董事长。\n" \
               "他特别喜欢干净，有严重洁癖，不喜欢和别人肢体接触。除了他喜欢的女生\n" \
               "因为他觉得女生接近他就为了他的钱。\n",
    background="这一天林瑾珂在打篮球，他不小心把球砸在你的头上。",
    description="接近林瑾珂，让林瑾珂对你心动",
    completion_criteria="林瑾珂接受和你的身体接触。",
    script="（哭笑）",
    history = "用户输入：啊……好疼，你是不是不长眼？他奶奶的。你：摸摸后脑勺，有点尴尬地笑）嘿，这不是失误嘛，平常我可是百发百中的。要不这样，我请你去那边的小店吃点东西，算是赔礼道歉，你看如何？（哭笑）任务失败")
print(task_module.displayModule())



